﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using DTO;
namespace DAO
{
    public class MonAnDAO
    {
        public bool CapNhatMonAn(int id, string ten, int id_loai_mon, int id_loai_menu, long gia)
        {

            SqlConnection conn = DataProvider.ConnectDB();
            SqlTransaction transaction = conn.BeginTransaction();
            try
            {
                string sql = "update MONAN set Ten_Mon_An=N'" + ten + "',Id_Loai_Mon_An='" + id_loai_mon + "',Id_Loai_Menu='" + id_loai_menu + "',Don_gia='" + gia + "' where Id_Mon_An='" + id + "'";
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Transaction = transaction;
                cmd.ExecuteNonQuery();
                transaction.Commit();
                return true;
            }
            catch
            {
                transaction.Rollback();
                //throw new Exception("Lỗi update" + error.Message);
                return false;
            }
        }
        public MonAnDTO LayMonAn(int id)
        {
            SqlConnection conn = DataProvider.ConnectDB();
            string sql = @"select Ten_Mon_An, Id_Loai_Mon_An,Id_Loai_Menu,Don_gia from MONAN where Id_Mon_An='" + id + "'";
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataReader reader = cmd.ExecuteReader();
            reader.Read();
            MonAnDTO ma = new MonAnDTO();
            ma.Ten_Mon_An = reader.GetString(0);
            ma.Id_Loai_Mon_An = reader.GetInt32(1);
            ma.Id_Loai_Menu = reader.GetInt32(2);
            ma.Don_Gia = reader.GetInt32(3);
            conn.Close();
            return ma;

        }
        public List<MonAnDTO> TraCuuMonAn(string ten, int loaimon, int loaimenu, long giatu, long giaden)
        {
            SqlConnection conn = DataProvider.ConnectDB();
            //
            string sql = @"select Ten_Mon_An, Id_Loai_Mon_An,Id_Loai_Menu,Don_gia,Id_Mon_An from MONAN";
            int kt = 0;//kiem tra phia truoc no co dk ko
            if (ten != null || loaimenu != -1 || loaimon != -1 || giatu != -1 || giaden != -1)
            {
                sql = sql + " where ";
            }
            //neu chon ten mon
            if (ten != null)
            {
                sql = sql + " Ten_Mon_An like '%" + ten + "%'";
                kt++;
            }
            //neu chon loai mon
            if (loaimon != -1)
            {
                if (kt > 0)
                {
                    sql = sql + " AND Id_Loai_Mon_An = '" + loaimon + "'";
                }
                else
                {
                    sql = sql + " Id_Loai_Mon_An = '" + loaimon + "'";
                }
                kt++;
            }
            // neu chon loai menu
            if (loaimenu != -1)
            {
                if (kt > 0)
                {
                    sql = sql + " AND Id_Loai_Menu = '" + loaimenu + "'";
                }
                else
                {
                    sql = sql + " Id_Loai_Menu = '" + loaimenu + "'";
                }
                kt++;
            }
            // neu cho gia tu
            if (giatu != -1)
            {
                if (kt > 0)
                {
                    sql = sql + " AND Don_gia >= '" + giatu + "'";
                }
                else
                {
                    sql = sql + " Don_gia >= '" + giatu + "'";
                }
                kt++;
            }
            //neu chon gia den
            if (giaden != -1)
            {
                if (kt > 0)
                {
                    sql = sql + " AND Don_gia <= '" + giaden + "'";
                }
                else
                {
                    sql = sql + " Don_gia >= '" + giaden + "'";
                }
            }
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataReader reader = cmd.ExecuteReader();
            List<MonAnDTO> ls = new List<MonAnDTO>();
            while (reader.Read())
            {
                MonAnDTO ma = new MonAnDTO();
                ma.Ten_Mon_An = reader.GetString(0);
                ma.Id_Loai_Mon_An = reader.GetInt32(1);
                ma.Id_Loai_Menu = reader.GetInt32(2);
                ma.Don_Gia = reader.GetInt32(3);
                ma.Id_Mon_An = reader.GetInt32(4);
                ls.Add(ma);
            }
            conn.Close();
            return ls;
        }
        // Lấy Danh Sách Món Ăn
        public List<MonAnDTO> DanhSachMonAn()
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "SELECT Id_Loai_Mon_An,Id_Loai_Menu,Ten_Mon_An,Don_gia,Id_Mon_An FROM MONAN ";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            // Lấy dữ liệu từ kết quả truy vấn
            SqlDataReader reader = cmd.ExecuteReader();

            // Đổ dữ liệu vào danh sách đối tượng Khu Vực
            List<MonAnDTO> listMADTO = new List<MonAnDTO>();
            while (reader.Read())
            {
                MonAnDTO singleRecord = new MonAnDTO();
                
                singleRecord.Id_Loai_Mon_An = reader.GetInt32(0);
                singleRecord.Id_Loai_Menu = reader.GetInt32(1);
                singleRecord.Ten_Mon_An = reader.GetString(2);
                singleRecord.Don_Gia = reader.GetInt32(3);
                singleRecord.Id_Mon_An = reader.GetInt32(4);
                listMADTO.Add(singleRecord);
            }

            // Đóng kết nối CSDL
            myCONN.Close();

            // Trả kết quả
            return listMADTO;
        }
        // Lấy Danh Sách Món Ăn Theo Loại Món Và Loại Menu
        public List<MonAnDTO> DanhSachMonAnTheoLoaiMonvaLoaiMenu(int ID_Loai_Mon, int ID_Loai_Menu)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "SELECT Id_Loai_Mon_An,Id_Loai_Menu,Ten_Mon_An,Don_gia,Id_Mon_An FROM MONAN ";
            mySQL += " WHERE Id_Loai_Mon_An=@ID_Loai_Mon";
            mySQL += " AND Id_Loai_Menu=@ID_Loai_Menu";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);
            SqlParameter para;
            para = cmd.Parameters.Add("@ID_Loai_Mon", System.Data.SqlDbType.Int, -1);
            para.Value = ID_Loai_Mon;
            para = cmd.Parameters.Add("@ID_Loai_Menu", System.Data.SqlDbType.Int, -1);
            para.Value = ID_Loai_Menu;
            // Lấy dữ liệu từ kết quả truy vấn
            SqlDataReader reader = cmd.ExecuteReader();

            // Đổ dữ liệu vào danh sách đối tượng Khu Vực
            List<MonAnDTO> listMADTO = new List<MonAnDTO>();
            while (reader.Read())
            {
                MonAnDTO singleRecord = new MonAnDTO();

                singleRecord.Id_Loai_Mon_An = reader.GetInt32(0);
                singleRecord.Id_Loai_Menu = reader.GetInt32(1);
                singleRecord.Ten_Mon_An = reader.GetString(2);
                singleRecord.Don_Gia = reader.GetInt32(3);
                singleRecord.Id_Mon_An = reader.GetInt32(4);
                listMADTO.Add(singleRecord);
            }

            // Đóng kết nối CSDL
            myCONN.Close();

            // Trả kết quả
            return listMADTO;
        }
        // Xóa Tất Cả Dữ Liệu 
        public void XoaTatCa()
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "DELETE FROM MONAN ";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);

            // Thực hiện câu truy vấn
            cmd.ExecuteReader();

            // Đóng kết nối CSDL
            myCONN.Close();
        }
        // Chức năng Phục Hồi Danh Sách
        public void PhucHoiDanhSachMonAnVoiIDTung(MonAnDTO MonAn)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "SET IDENTITY_INSERT MONAN ON INSERT INTO MONAN(Id_Mon_An,Ten_Mon_An,Id_Loai_Mon_An,Id_Loai_Menu,Don_gia) VALUES(@IDMonAn,@TenMonAn,@IDLoaiMon,@IDLoaiMenu,@DonGia)";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);
            SqlParameter para;
            // Add 
            para = cmd.Parameters.Add("@IDMonAn", System.Data.SqlDbType.Int);
            para.Value = MonAn.Id_Mon_An;
            // Add 
            para = cmd.Parameters.Add("@TenMonAn", System.Data.SqlDbType.NVarChar);
            para.Value = MonAn.Ten_Mon_An;
            // Add 
            para = cmd.Parameters.Add("@IDLoaiMon", System.Data.SqlDbType.Int);
            para.Value = MonAn.Id_Loai_Mon_An;
            // Add 
            para = cmd.Parameters.Add("@IDLoaiMenu", System.Data.SqlDbType.Int);
            para.Value = MonAn.Id_Loai_Menu;
            // Add 
            para = cmd.Parameters.Add("@DonGia", System.Data.SqlDbType.Int);
            para.Value = MonAn.Don_Gia;
            // Thực hiện câu truy vấn
            cmd.ExecuteReader();

            // Đóng kết nối CSDL
            myCONN.Close();
        }
        // Thêm Món Ăn
        public int ThemMonAn(MonAnDTO maDTO)
        {
            SqlConnection myCONN = DataProvider.ConnectDB();
            string mySQL = "INSERT INTO MONAN(Ten_Mon_An,Id_Loai_Mon_An,Id_Loai_Menu,Don_gia) VALUES (@Ten_Mon_An,@Id_Loai_Mon,@Id_Loai_Menu,@Don_Gia)";
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);
            SqlParameter para;
            para = cmd.Parameters.Add("@Ten_Mon_An", System.Data.SqlDbType.NVarChar, -1);
            para.Value = maDTO.Ten_Mon_An;
            para = cmd.Parameters.Add("@Id_Loai_Mon", System.Data.SqlDbType.Int, -1);
            para.Value = maDTO.Id_Loai_Mon_An;
            para = cmd.Parameters.Add("@Id_Loai_Menu", System.Data.SqlDbType.Int, -1);
            para.Value = maDTO.Id_Loai_Menu;
            para = cmd.Parameters.Add("@Don_Gia", System.Data.SqlDbType.Int, -1);
            para.Value = maDTO.Don_Gia;

            int kq;
            try
            {
                kq = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                return 0;
            }
            myCONN.Close();
            return 1;
        }
        // Xóa Món Ăn
        public void XoaMonAn(int Id_Mon_An)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "DELETE FROM MONAN WHERE Id_Mon_An = @Id_Mon_An ";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);
            SqlParameter para = cmd.Parameters.Add("@Id_Mon_An", System.Data.SqlDbType.Int, -1);
            para.Value = Id_Mon_An;

            cmd.ExecuteReader();


        }
        
        // Lấy Đơn Giá Món Ăn Dựa Trên ID
        public static long LayDonGia(int Id_Mon_An)
        {
            // Tạo Kết Nối CSDL
            SqlConnection myCONN = DataProvider.ConnectDB();

            //Viết Câu Lệnh SQL
            string mySQL = "SELECT Don_gia FROM MONAN WHERE Id_Mon_An = @Id_Mon_An ";

            // Thực hiện truy vấn
            SqlCommand cmd = new SqlCommand(mySQL, myCONN);
            SqlParameter para = cmd.Parameters.Add("@Id_Mon_An", System.Data.SqlDbType.Int, -1);
            para.Value = Id_Mon_An;

            
            // Lấy dữ liệu từ kết quả truy vấn
            SqlDataReader reader = cmd.ExecuteReader();
            long layDonGia=0;
            // Đổ dữ liệu vào danh sách đối tượng Khu Vực
            while (reader.Read())
            {
                layDonGia = reader.GetInt32(0);
            }

            // Đóng kết nối CSDL
            myCONN.Close();

            // Trả kết quả
            return layDonGia;
        }


    }
}
